package wangxiaotao.service.impl;

import lombok.extern.slf4j.Slf4j;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/admin/{user}")
@Slf4j
public class WebSocketServerService {
    /**
     * 建立会话
     *
     * @param session  会话
     * @param nickName 昵称
     */
    @OnOpen
    public void onOpen(Session session, @PathParam("user") String user) {
        // 对连接建立后的操作，这里添加会话或者对上线信息进行发送
        log.error("----------------->    连接建立, {}",user);
    }

    /**
     * 关闭连接
     */
    @OnClose
    public void onClose() {
        // 关闭连接时的操作，这里在关闭连接时会调用此方法，可以做退出提示
        log.error("----------------->    关闭连接");
    }

    /**
     * 消息发送（有点相像Controller层的方法参数设计，只是多了session）
     *
     * @param session  会话（当前）
     * @param user 昵称
     *  @param msg 消息
     */
    @OnMessage
    public void OnMessage(Session session, @PathParam("user") String user, String msg) {
        // 发送消息操作，当会话发送消息时会调用这个方法
        log.error("----------------->    发送消息  :{}",msg);
    }

    /**
     * 发生错误时调用
     */
    @OnError
    public void onError(Session session, Throwable error) {
        // 案例
        log.error("发生错误,用户：{}，发生错误", session.getId());
        error.printStackTrace();
    }

    /**
     * 群发自定义消息
     */
    public void broadcast(String message) {
        // webSocketSet是存放会话（Session）的集合
//        webSocketSet.forEach(item -> {
//            try {
//                // 判断会话是否连接
//                if (item.session.isOpen()){
//                    // 发送同步信息到当前会话
//                    item.session.getBasicRemote().sendText(message);
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        });
    }
}
